"""
ASGI config for application project.

It exposes the ASGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/asgi/
"""



#用于配置Django项目的ASGI（Asynchronous Server Gateway Interface）应用程序。
# ASGI是Django的一个异步服务器网关接口，它允许在Django项目中使用异步功能。

import os

from django.core.asgi import get_asgi_application
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')  #设置环境变量DJANGO_SETTINGS_MODULE的默认值为application.settings，指定Django项目的配置文件。
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"  #设置环境变量DJANGO_ALLOW_ASYNC_UNSAFE为true，允许在不安全的上下文中使用异步功能。


http_application = get_asgi_application()  #获取ASGI应用程序实例
from application.routing import websocket_urlpatterns
application = ProtocolTypeRouter({  #创建一个ProtocolTypeRouter实例，用于处理不同类型的协议请求。
                                    # 在这个例子中，它处理HTTP和WebSocket请求
    "http":http_application,
    'websocket': AuthMiddlewareStack(   #将WebSocket请求映射到经过认证中间件栈（AuthMiddlewareStack）处理的URL路由器（URLRouter），并使用websocket_urlpatterns作为路由配置
        URLRouter(
            websocket_urlpatterns #指明路由文件是devops/routing.py
        )
    ),
})
